#ifndef _BSP_RF433_H_
#define _BSP_RF433_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"

// 硬件定义
#define RF433_TIM_NBR                   TIM5
#define RF433_TIM_CLK_ENABLE()          LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM5)
#define RF433_TIM_IRQn                  TIM5_IRQn
#define RF433_TIM_IRQn_Handler          TIM5_IRQHandler

#define RF433_PORT                      GPIOA
#define RF433_GPIO_CLK_ENABLE()         LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA)
#define RF433_PIN                       LL_GPIO_PIN_1
#define RFDI                            LL_GPIO_IsInputPinSet(RF433_PORT, RF433_PIN)

// 定时周期和解码参数（单位：us）
#define TIME_CYCLE 80
#define MIN_LEAD_CODE (5600 / TIME_CYCLE)     // 引导码最小值
#define MAX_LEAD_CODE (16000 / TIME_CYCLE)    // 引导码最大值
#define MIN_BIT_DURATION (80 / TIME_CYCLE)    // 数据位最小值
#define MAX_BIT_DURATION (2400 / TIME_CYCLE)  // 数据位最大值

// 解码状态枚举
typedef enum {
    STATE_LEAD_CODE,       // 同步码
    STATE_HIGH_BIT,        // 高电平数据位
    STATE_LOW_BIT,         // 低电平数据位
    STATE_DATA_PROCESS,    // 数据处理
    STATE_PACKET_COMPLETE  // 完成一帧完整数据
} Decode_State_t;

// 数据处理回调函数类型
typedef void (*RF433_Data_Handler_t)(uint8_t *data);

// RF433 解码上下文
typedef struct {
    Decode_State_t decode_state;  // 当前解码状态
    uint32_t lead_code_count;     // 引导码计数
    uint32_t high_bit_count;      // 高电平计数
    uint32_t low_bit_count;       // 低电平计数
    uint32_t high_bit_duration;   // 高电平持续时间
    uint32_t low_bit_duration;    // 低电平持续时间
    uint8_t received_buffer[3];   // 接收数据缓冲区
    uint8_t received_byte_count;  // 已接收字节数
    uint8_t bit_count;            // 已接收位数
    uint8_t received_data;        // 当前解码字节
    RF433_Data_Handler_t data_handler;
} RF433_Context_t;

// 函数声明
void bsp_rf433_init (void);                                            // 初始化 RF433 模块
void bsp_rf433_register_handler(RF433_Data_Handler_t handler); // 注册数据处理回调

#ifdef __cplusplus
}
#endif

#endif /* _BSP_RF433_H_ */
